﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Runtime.Serialization;
//*************************************************************************
//第01字节：帧头（3DH-应答（=），40H-广播（=））
//OLD--------第02字节：帧长（0EH）
//第02字节：帧长（0DH）
//第03字节：ID（00H-应答时，FFH-广播时）
//第04字节：光照低字节
//第05字节：光照高字节
//第06字节：雨雪信号(ACC.0,00-none,01-rain)
//第07字节：风速低字节
//第08字节：风速高字节
//第09字节：风向
//第0A字节：室外温度低字节
//第0B字节：室外温度高字节
//第0C字节：大风报警位（ACC.0:0-无警，1-有警）
//第0D字节：校验字节（1字节-0AAH）
//***********************************
//OLD------第0D字节：室外湿度字节
//OLD------第0E字节：校验字节（1字节-0AAH）。
//*************************************************************************
namespace YmSoft.Old
{
    [DataContract]
    [MsgVM]
    //[RecordTypeAttribute(ERecordType.WeatherStationReturnMsgBase)]

    public abstract class WeatherStationReturnMsgBase : MsgBase
    {
        public WeatherStationReturnMsgBase() : base() { }

        public WeatherStationReturnMsgBase(byte[] data) : base(data) { }

        [SP(0x02, true)]
        public abstract byte Id { get; }

        [MsgVM]
        [DataMember]
        [SP(0x04)]
        [MsgDB]
        public byte 光照 { get; set; }

        #region 雨雪

        [MsgVM]
        [MsgDB]
        public byte 雨雪
        {
            get
            {
                return OldUtility.GetACC0(雨雪EX);
            }
            set
            {
                雨雪EX = (byte)(雨雪ACC + value);
            }
        }

        [DataMember]
        public byte 雨雪ACC { get; set; }

        [SP(0x06)]
        [DataMember]
        public byte 雨雪EX { get; set; }

        #endregion

        [MsgVM]
        [MsgDB]
        public decimal 风速
        {
            get
            {
                return OldUtility.WindSpeedToDisplay(风速EX);
            }
            set
            {
                风速EX = OldUtility.WindSpeedToReal(value);
            }
        }


        [DataMember]
        [DP(0x07, 0x08)]
        public short 风速EX { get; set; }

        [MsgVM]
        [DataMember]
        [SP(0x09)]
        [MsgDB]
        public byte 风向 { get; set; }

        [MsgVM]
        [MsgDB]
        public decimal 室外温度
        {
            get
            {
                return OldUtility.TemperatureToDisplay(室外温度EX);
            }
            set
            {
                室外温度EX = OldUtility.TemperatureToReal(value);
            }
        }

        [DP(0x0A, 0x0B)]
        [DataMember]
        public short 室外温度EX { get; set; }

        #region 大风报警位

        [MsgVM]
        public byte 大风报警位
        {
            get
            {
                return OldUtility.GetACC0(大风报警位EX);
            }
            set
            {
                大风报警位EX = (byte)(大风报警位ACC + value);
            }
        }

        [DataMember]
        [MsgVM]
        public byte 大风报警位ACC { get; set; }

        [SP(0x0C)]
        [DataMember]
        public byte 大风报警位EX { get; set; }

        #endregion

    }
}
